/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.servicio.interfaces;

import desarrollosoft.ghce.entidades.Prestacion;
import desarrollosoft.ghce.entidades.Componente;
import desarrollosoft.ghce.entidades.Consulta;
import desarrollosoft.ghce.entidades.Diagnostico;
import desarrollosoft.ghce.entidades.Elemento;
import desarrollosoft.ghce.entidades.EstudioImaginologia;
import desarrollosoft.ghce.entidades.EstudioLaboratorio;
import desarrollosoft.ghce.entidades.Gravedad;
import desarrollosoft.ghce.entidades.Imagen;
import desarrollosoft.ghce.entidades.Intervencion;
import desarrollosoft.ghce.entidades.Monodroga;
import desarrollosoft.ghce.entidades.Paciente;
import desarrollosoft.ghce.entidades.Plantilla;
import desarrollosoft.ghce.entidades.Profesional;
import desarrollosoft.ghce.entidades.ResultadoComponente;
import desarrollosoft.ghce.entidades.Tratamiento;
import desarrollosoft.ghce.entidades.ValorNormal;
import java.util.Date;
import java.util.List;

/**
 *
 * @author ariel
 */
public interface IServicioHistorial {
    
    /**
     * Busca todos los elementos del paciente elegido que coincidan con la descripcion o gravedad
     * @param pacienteElegido
     * @param descripcion si viene vacia trae todas
     * @param gravedad si viene en null trae todas
     * @return 
     */
    public List<Elemento> buscarElementos(Paciente pacienteElegido, String descripcion, Gravedad gravedad);
    
    public List<Gravedad> obtenerTodasGravedades();
    
    public List<String> obtenerTodasTipificaciones();
    
    public List<Diagnostico> buscarDiagnostico(String nombre);
    
    public List<Monodroga> buscarMedicamento(String nombre);
    
    public void crearConsulta(Consulta consulta, String nombreUsuarioActual) throws Exception;
    
    public void modificarConsulta(Consulta consulta, String nombreUsuarioActual) throws Exception;
    
    public void eliminarConsulta(Consulta consulta, String nombreUsuarioActual) throws Exception;
    
    public void crearTratamiento(Tratamiento tratamiento, String nombreUsuarioActual) throws Exception;
    
    public void modificarTratamiento(Tratamiento tratamiento, String nombreUsuarioActual) throws Exception;
    
    public void eliminarTratamiento(Tratamiento tratamiento, String nombreUsuarioActual) throws Exception;

    public void crearIntervencion(Intervencion intervencion, String nombreUsuarioActual) throws Exception;

    public void modificarIntervencion(Intervencion intervencion, String nombreUsuarioActual) throws Exception;
    
    public void eliminarIntervencion(Intervencion intervencion, String nombreUsuarioActual) throws Exception;

    public List<Prestacion> buscarCirugias(String nombre);

    public List<Plantilla> traerTodasPlantillas();

    public List<Plantilla> traerTodasPlantillas(String textoBuscar);

    public IResultadoOperacion tratarDeCrearEstudios(List<Plantilla> listaPlantillasElegidas, Paciente paciente, String nombreUsuarioActual) throws Exception;

    public void crearEstudios(List<Plantilla> listaPlantillas, Paciente paciente, String nombreUsuarioActual) throws Exception;
    
    public List<ResultadoComponente> traerResultados(EstudioLaboratorio estudioLaboratorio);

    public void guardarResultados(EstudioLaboratorio estudioLaboratorio, List<ResultadoComponente> listaResultadoComponentes, String nombreUsuarioActual) throws Exception;

    public ValorNormal elegirValorNormal(Componente componente, Paciente paciente);

    public void modificarEstudioImaginologia(EstudioImaginologia estudioImaginologia, List<Imagen> listaImagenes, String nombreUsuarioActual) throws Exception;

    public List<String> obtenerTodosTiposEstudios();

    public void eliminarEstudioLaboratorio(EstudioLaboratorio estudioLaboratorio, String nombreUsuarioActual) throws Exception;

    public void eliminarEstudioImaginologia(EstudioImaginologia estudioImaginologia, String nombreUsuarioActual) throws Exception;

    public Date obtenerFechaUltimoPedidoEstudio(Plantilla plantilla, Paciente paciente);
}
